package happy.town.threeBook;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
 * @BelongsProject: threeBook
 * @BelongsPackage: a.happy.town.case_student
 * @Author: ByHappy  (Email:1300985301@qq.com)
 * @CreateTime: 2023-07-30 22:46
 * @Description: 用户登录功能
 * @Version: 1.0
 **/
public class UserLogin {

    /**
     * 登录主体方法
     *
     * @param
     * @author ByHappy
     * @date 23:18 2023/7/30
     **/
    public static void login() {

        UserRegister userRegister = new UserRegister();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入用户名:");
            String username = sc.next();

            //  1. 判断用户名是否存在
            boolean flag = userRegister.usernameR(username, null, true);
            if (!flag) {
                System.out.println("用户名:" + username + "未注册，请先注册再登录");
                return;
            }

            System.out.println("请输入密码：");
            String password = sc.next();

            while (true) {
                String codeR = getCode();
                System.out.println("验证码：" + codeR);
                System.out.println("请输入验证码");
                String code = sc.next();
                if (code.equalsIgnoreCase(codeR)) {
                    System.out.println("验证码 OK!");
                    break;
                } else {
                    System.out.println("验证码错误");
                    continue;
                }
            }

            //  2. 验证用户名和密码是否正确
            boolean flag2 = userRegister.usernameR(username, password, false);
            if (flag2) {
                System.out.println("登录成功，您可以开始使用学生管理系统了");
                BookArr bookArr = new BookArr();
                bookArr.HappyBookhouse();
                break;
            } else {
                System.out.println("登录失败，用户名或密码错误");
                if (i == 2) {
                    System.out.println("当前用户:" + username + "已被锁定，请联系高兴高先生");
                    // 若当前用户被锁定，直接结束方法即可
                    return;
                } else {
                    System.out.println("用户名或密码错误，还剩下" + (2 - i) + "次机会");
                }
            }
        }
    }


    /**
     * 验证码方法
     *
     * @return java.lang.String
     * @author ByHappy
     * @date 22:48 2023/7/30
     **/
    public static String getCode() {

        // 1、创建一个集合添加所有的大写和小写字母
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char) ('a' + i));
            list.add((char) ('A' + i));
        }

        StringBuilder stringBuilder = new StringBuilder();

        // 2、要随机抽取4个字符
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            // 获取随机索引
            int index = random.nextInt(list.size());
            // 利用随机索引获取字符
            char c = list.get(index);
            // 把随机字符添加到StringBuilder里
            stringBuilder.append(c);
        }

        // 3、把一个随机数字添加到末尾
        int number = random.nextInt(10);
        stringBuilder.append(number);

        // 4、如果我们要修改字符串中的内容
        // 先把字符串变成字符数组，在数组中修改，然后再创建一个新的字符串
        char[] arr = stringBuilder.toString().toCharArray();
        // 拿着最后一个索引，跟随机索引进行交换
        int rendomIndex = random.nextInt(arr.length);
        // 最大索引指向的元素 跟随机索引指向的元素交换
        // 设一个temp,三者进行赋值交换
        char temp = arr[rendomIndex];
        arr[rendomIndex] = arr[arr.length - 1];
        arr[arr.length - 1] = temp;
        return new String(arr);
    }
}
